/*
* Copyright (c) 2009, Roc King
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
*     * Redistributions of source code must retain the above copyright
*       notice, this list of conditions and the following disclaimer.
*     * Redistributions in binary form must reproduce the above copyright
*       notice, this list of conditions and the following disclaimer in the
*       documentation and/or other materials provided with the distribution.
*     * Neither the name of the OwnWaterloo,Roc King nor the
*       names of its contributors may be used to endorse or promote products
*       derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/


#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include "student.h"

std::ostream& operator<<(std::ostream& os,const student& s) {
    return os//<<std::setiosflags(std::ios_base::left)
             <<"name="<<std::setw(12)<<s.name
             <<" chinese="<<s.mark[chinese]
             <<" mathematics="<<s.mark[mathematics]
             <<" english="<<s.mark[english]<<std::endl;
}

void print(const student students[],size_t count) {
    for (size_t i=0;i<count;++i)
        std::cout<<students[i];
    std::cout<<std::endl;
}

int main() {
    using namespace std;

    student students[] = {
        { "cherrie",    {70,80,90} },
        { "ownwaterloo",{90,70,80} },
        { "birdsong",   {80,90,70} },
    };
    const size_t count = sizeof(students)/sizeof(students[0]);

    cout<<"before sort\n";
    print(students,count);

    sort_by_course(students,count,chinese);
    cout<<"after sort by chinese\n";
    print(students,count);

    sort_by_course(students,count,mathematics);
    cout<<"after sort by mathematics\n";
    print(students,count);

    sort_by_course(students,count,english);
    cout<<"after sort by english\n";
    print(students,count);

    cout<<"press enter to exit\n";
    cin.get();
    return 0;
}
